home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / ObjList.h < prev    next >
C/C++ Source or Header  |  1990-12-18  |  2KB  |  104 lines

  1. #ifndef ObjList_First
  2. #ifdef __GNUG__
  3. #pragma once
  4. #endif
  5. #define ObjList_First
  6.  
  7. #include "SeqColl.h"
  8.  
  9. typedef void (*ObjectFunction)(ObjPtr, ...);     
  10.  
  11. class ObjLink: public Object {
  12. friend class ObjList;
  13. friend class ObjListIter;
  14. friend class RevObjListIter;
  15.     ObjLink *next, *previous;
  16.     ObjPtr op;
  17.     
  18. public:
  19.     MetaDef(ObjLink);
  20.     ObjLink(ObjPtr a, ObjLink* n, ObjLink* p);
  21.     ObjLink(ObjPtr a, ObjLink*);
  22.     ~ObjLink();
  23.     ObjPtr Op()
  24.     { return op; }
  25.     ObjLink *Next()
  26.     { return next; }
  27.     void FreeAll();
  28.     //---- memory allocation
  29.     void *operator new (size_t);
  30.     void operator delete(void *vp);
  31. };
  32.  
  33. class ObjList: public SeqCollection {
  34. friend class ObjListIter;
  35. friend class RevObjListIter;
  36.  
  37. protected:
  38.     ObjLink *first, *last;
  39.     void RemoveDeleted();
  40.     void RemoveLink(ObjLink *l);
  41.     ObjLink *FindObjLink(ObjPtr op, bool byPtr);
  42.     void PrivInsertBefore(ObjPtr before, ObjPtr op, bool byPtr, char *name);
  43.     void PrivInsertAfter(ObjPtr after, ObjPtr op, bool byPtr, char *name);
  44.     void InsertObjLink(ObjPtr op, ObjLink *l);
  45.     
  46. public:
  47.     MetaDef(ObjList);
  48.     
  49.     ObjList();
  50.     ~ObjList();
  51.     void FreeAll();
  52.     
  53.     void Insert(ObjPtr a);
  54.     void InsertBefore(ObjPtr before, ObjPtr a);
  55.     void InsertAfter(ObjPtr after, ObjPtr a);
  56.     void InsertBeforePtr(ObjPtr before, ObjPtr a);
  57.     void InsertAfterPtr(ObjPtr after, ObjPtr a);
  58.     
  59.     virtual ObjPtr Replace(ObjPtr a, ObjPtr b);
  60.     ObjPtr First();
  61.     ObjPtr Last();
  62.     ObjPtr GetAt(int);
  63.     ObjPtr Remove(ObjPtr);
  64.     ObjPtr RemovePtr(ObjPtr);
  65.     
  66.     //---- collection compatibility
  67.     Iterator *MakeIterator();
  68.     Iterator *MakeReversedIterator();
  69.     ObjPtr Add(ObjPtr);
  70.     void Empty(int);
  71.     ObjPtr At (int i);
  72.     ObjPtr Before(ObjPtr);
  73.     ObjPtr After(ObjPtr);
  74. };
  75.  
  76. //---- class ObjListIter -------------------------------------------------------
  77.  
  78. class ObjListIter: public Iterator {
  79. public:
  80.     ObjLink *ce;
  81.     ObjList *cs;
  82.  
  83.     ObjListIter(Collection *s);
  84.     ~ObjListIter();
  85.     void Reset(Collection *s= 0);
  86.     Collection *Coll();
  87.     Object* operator()();
  88.  
  89.     //---- memory allocation
  90.     void *operator new (size_t);
  91.     void operator delete(void *vp);
  92. };
  93.  
  94. //---- class RevObjListIter ----------------------------------------------------
  95.  
  96. class RevObjListIter: public ObjListIter {
  97. public:
  98.     RevObjListIter(ObjList *s);
  99.     Object* operator()();
  100.     void Reset(Collection *s= 0);
  101. };
  102.  
  103. #endif ObjList
  104.